const Service = require('egg').Service;
const svgCaptcha = require('svg-captcha');
const jwt = require("jsonwebtoken");
var cache = require('memory-cache');
//服务模板
//使用方法: 在控制器中 await ctx.service.serviceM.TEST(); //serviceM是本服务的文件名 ,TEST是方法
class toolsService extends Service {


  constructor(ctx) {
    super(ctx);
    // this.root = 'https://localhost:7001';
  }
  async captcha() {//app专用 
    const capctcha = svgCaptcha.create({
      // 翻转颜色
      inverse: false,
      ignoreChars: '0o1i',
      // 验证码字符中排除 0o1i
      // 字体大小
      fontSize: 38,
      // 噪声线条数
      noise: 1,
      // 宽度
      width: 90, //之前110   默认 150
      // 高度
      height: 35, //默认50
      color: true, //true 彩色
    })
    // this.ctx.session.code = capctcha.text;
    // console.log("验证码"+capctcha.text)
    return capctcha
  }
  async webCaptcha() {//web专用 
    const capctcha = svgCaptcha.create({
      // 翻转颜色
      inverse: true,
      // ignoreChars: '0o1i',
      // 验证码字符中排除 0o1i
      // 字体大小
      fontSize: 38,
      // 噪声线条数
      noise: 2,
      // 宽度
      width:120, //默认 150
      // 高度
      height: 50, //默认50
      color: true, //true 彩色
    })
    // this.ctx.session.code = capctcha.text;
    // console.log("验证码"+capctcha.text)
    return capctcha
  }

  //根据用户id生成token,前端传的时候 要传token 和id进行交叉验证
  async tokenSign(id,timeLong) {//
    // console.log("以后可以修改为UUID防止用户换设备",id, name)
    let timestr='7days';//默认7天
    if(timeLong){
      timestr=timeLong*60+'s';
    }
    console.log("时间",timestr);
    const token =await jwt.sign({
      user_id: id,
      // userName: name
    }, 'ABCEFG'+id, {
      expiresIn: timestr //2days  60s
    });
    return token
  }
  async tokenVerify(token,id) {
    // console.log("验证");
    const tokenContent = await jwt.verify(token, 'ABCEFG'+id); //如果token过期或验证失败，将抛出错误
    // console.log(tokenContent)
    return tokenContent
  }


async saveGetCache(key,val){
  if(val){//存
    // console.log("存入的:",key+"="+val);
    await cache.put(key+'',val,30000);//3分钟
    return true
  }else{//取
   const val =  await cache.get(key+'');
   console.log("读取的值:"+key+"="+val)
    return val
  }
}

//有时间限制的缓存
  async timeCache(key,val,t){
     //t=t?t:6;//默认6s
    //  console.log("验证码",val)
   await cache.put(key+'',val,t*1000);
   return true
  }

  async getTimeCache(key){
    const val=  await cache.get(key+'');
   return  val
  }

  
}

module.exports = toolsService;